﻿/**
 * 表格相关的元数据。
 */
Ext.define('Happy.metadata.mixin.MetadataOfGrid', {
    /**
     * 返回表格的类名。
     * 
     * @return {String}
     */
    getGridClassName: function () {
        var me = this;

        return me.data.namespace + '.' + me.data.name.toLowerCase() + '.view.Grid';
    },

    /**
     * 返回表格的类型别名。
     * 
     * @return {String}
     */
    getGridClassAlias: function () {
        var me = this;

        return me.data.name.toLowerCase() + '-grid';
    },

    /**
     * 返回表格的标题。
     * 
     * @return {String}
     */
    getGridTitle: function () {
        var me = this;

        return me.getDisplayName() + '-管理';
    },

    /**
     * 返回默认的表格列配置数组。
     * 
     * @return {Array}
     */
    getDefaultGridColumns: function () {
        var me = this;

        var properties = Ext.Array.filter(me.getProperties(), function (property) {
            return property.showInGrid !== false;
        });

        return Ext.Array.map(properties, function (property) {
            var gridColumnConfig = window.CSharpTypeMapper.getGridColumnDefaultConfig(property.dataType);

            gridColumnConfig = Ext.apply({
                dataIndex: property.name,
                text: property.getDisplayName()
            }, property.gridColumnConfig || {}, gridColumnConfig);

            if (property.gridColumnConfigFns) {
                Ext.Array.each(property.gridColumnConfigFns, function (gridColumnConfigFn) {
                    gridColumnConfigFn(me, property, gridColumnConfig);
                });
            }

            return gridColumnConfig;
        });
    },

    /**
     * 返回树形表格的类名。
     * 
     * @return {String}
     */
    getTreeGridClassName: function () {
        var me = this;

        return me.data.namespace + '.' + me.data.name.toLowerCase() + '.view.Tree';
    },

    /**
     * 返回树形表格的类型别名。
     *
     * @return {String}
     */
    getTreeGridClassAlias: function () {
        var me = this;

        return me.data.name.toLowerCase() + '-tree';
    },

    /**
     * 返回默认的树形表格列配置数组。
     * 
     * @return {Array}
     */
    getDefaultTreeGridColumns: function () {
        var me = this;

        var properties = Ext.Array.filter(me.getProperties(), function (property) {
            return property.showInTreeGrid !== false;
        });

        return Ext.Array.map(properties, function (property) {
            var treeColumnConfig = window.CSharpTypeMapper.getGridColumnDefaultConfig(property.dataType);

            treeColumnConfig = Ext.apply({
                xtype: (property.name === me.data.summaryProperty ? 'treecolumn' : 'gridcolumn'),
                dataIndex: property.name,
                text: property.getDisplayName()
            }, property.treeColumnConfig || {}, treeColumnConfig);

            if (property.treeColumnConfigFns) {
                Ext.Array.each(property.treeColumnConfigFns, function (treeColumnConfigFn) {
                    treeColumnConfigFn(me, property, treeColumnConfig);
                });
            }

            return treeColumnConfig;
        });
    }
});